18187
9402
Változtatható egy elem láthatósága a .hide (), .show () vagy .toggle () függvényekkel?
Hogyan tesztelné, ha egy elem látható vagy rejtett? 
1
2
Következő
Mivel a kérdés egyetlen elemre vonatkozik, ez a kód alkalmasabb lehet:
// Megjeleníti a CSS-tartalmat: [nincs | blokk], figyelmen kívül hagyja a láthatóságot: [igaz | hamis]
$ (element) .is (": látható");
// Ugyanez működik a rejtettel is
$ (element) .is (": rejtett");
Ez megegyezik Twernt javaslatával, de egyetlen elemre vonatkozik; és megegyezik a jQuery GYIK-ben ajánlott algoritmussal.
A jQuery's () használatával ellenőrizzük a kiválasztott elemet egy másik elemmel, választóval vagy bármely jQuery objektummal. Ez a módszer a DOM elemek mentén haladva egyezést talál, amely kielégíti az átadott paramétert. Igaz lesz, ha egyezik, ellenkező esetben hamis.
|
Használhatja a rejtett választót:
// Megfelel minden rejtett elemnek
$ ('elem: rejtett')
És a látható választó:
// Megfelel minden látható elemnek
$ ('elem: látható')
|
if ($ (element) .css ('display') == 'nincs' || $ (element) .css ("láthatóság") == "rejtett") {
// 'elem' rejtve van
}
A fenti módszer nem veszi figyelembe a szülő láthatóságát. A szülő figyelembevételéhez az .is (": hidden") vagy .is (": visible") kifejezést kell használnia.
Például,

A fenti módszer a div2 láthatónak tekinti, míg a látható nem. De a fentiek sok esetben hasznosak lehetnek, különösen akkor, ha meg kell találni, hogy vannak-e hibajelzések a rejtett szülőben, mert ilyen körülmények között: a látható nem fog működni.
|
Ezen válaszok egyike sem foglalkozik azzal a kérdéssel, amire én úgy gondolom, hogy erre kerestem: "Hogyan kezeljem azokat az elemeket, amelyek láthatók: rejtettek?" Sem a látható, sem a rejtett nem fogja ezt kezelni, mivel mindketten a dokumentáció szerint keresik a megjelenítést. Amennyire meg tudtam állapítani, nincs választó a CSS láthatóságának kezelésére. Így oldottam meg (szokásos jQuery választók, lehet, hogy sűrítettebb szintaxis van):
$ (". item"). mindegyik (function () {
if ($ (this) .css ("láthatóság") == "rejtett") {
// kezelni a nem látható állapotot
} más {
// kezeli a látható állapotot
}
});
|
A Hogyan lehet meghatározni a váltott elem állapotát?
A: látható és: rejtett választókkal meghatározhatja, hogy egy elem összeesett-e vagy sem.
var isVisible = $ ('# myDiv'). is (': látható');
var isHidden = $ ('# myDiv'). is (': rejtett');
Ha egyszerűen csak egy elemre hat, annak láthatósága alapján, akkor a következőket tartalmazhatja: látható vagy: rejtett a választó kifejezésbe. Például:
$ ('# myDiv: látható'). animáció ({left: '+ = 200px'}, 'lassú');
|
Gyakran ellenőrzi, hogy valami látható-e vagy sem, azonnal halad előre, és mást csinál vele. A jQuery láncolás ezt megkönnyíti.
Tehát, ha van választója, és csak akkor akar végrehajtani valamilyen műveletet, ha látható vagy rejtett, használhat szűrőt (": látható") vagy szűrőt (": rejtett"), majd láncolhatja a kívánt művelettel vesz.
Tehát egy if utasítás helyett, például:
if ($ ('# btnUpdate'). is (": látható"))
{
$ ('# btnUpdate'). animáció ({width: "toggle"}); // Gomb elrejtése
}
Vagy hatékonyabb, de még csúnyább:
var gomb = $ ('# btnUpdate');
if (button.is (": látható"))
{
button.animate ({width: "toggle"}); // Gomb elrejtése
}
Megteheti mindezt egy sorban:
$ ('# btnUpdate'). filter (": látható"). animál ({width: "toggle"});
|
A: látható választó a jQuery dokumentációja szerint:
CSS-értékük nincs.
Olyan formaelemek, amelyek type = "rejtett".
Szélességüket és magasságukat kifejezetten 0-ra állítják.
Egy ősi elem rejtve van, ezért az elem nem jelenik meg az oldalon.
A láthatósági elemek: rejtett vagy átlátszatlanság: 0 láthatónak tekinthetők, mivel továbbra is helyet foglalnak az elrendezésben.
Ez bizonyos esetekben hasznos, másokban haszontalan, mert ha ellenőrizni szeretné, hogy az elem látható-e (kijelző! = Nincs), figyelmen kívül hagyva a szülők láthatóságát, azt találja, hogy .css ("display") == 'nincs 'nemcsak gyorsabb, hanem a láthatósági ellenőrzést is helyesen adja vissza.
Ha megjelenítés helyett a láthatóságot szeretné ellenőrizni, akkor a következőt kell használnia: .css ("láthatóság") == "rejtett".
Vegye figyelembe a további jQuery-megjegyzéseket is:
Mivel a: látható a jQuery kiterjesztése, és nem része a CSS specifikációnak, a: látható lekérdezések nem használhatják ki a natív DOM querySelectorAll () módszer által biztosított teljesítménynövelést. A legjobb teljesítmény eléréséhez a: látható elem kiválasztásához először válassza ki az elemeket egy tiszta CSS választóval, majd használja a .filter (": látható") fájlt.
Továbbá, ha aggódik a teljesítmény miatt, akkor jelölje be a Most látod engem… teljesítmény mutatása / elrejtése jelölést (2010-05-04). És használjon más módszereket az elemek megjelenítésére és elrejtésére.
|
Ez nekem működik, és a show () és a hide () használatával rejtetté / láthatóvá teszem a div-em:
if ($ (this) .css ('display') == 'nincs') {
/ * a kódod ide megy * /
} más {
/ * alternatív logika * /
}
|
Hogyan működik az elemek láthatósága és a jQuery;
Egy elem elrejthető a kijelzővel: none,láthatóság: rejtett vagy átlátszatlanság: 0. A módszerek közötti különbség:
display: egyik sem rejti el az elemet, és nem foglal helyet;
láthatóság: rejtett elrejti az elemet, de így is helyet foglal az elrendezésben;
opacitás: 0 az elemet „láthatóság: rejtettként” rejti, és még mindig helyet foglal az elrendezésben; az egyetlen különbség az, hogy az átlátszatlanság lehetővé teszi az ember számára, hogy egy elemet részben átlátszóvá tegyen;
ha ($ ('.. cél'). is (': rejtett')) {
$ ('.. cél'). show ();
} más {
$ ('. cél'). hide ();
}
ha ($ ('.. cél'). is (': látható')) {
$ ('.. cél'). hide ();
} más {
$ ('.. cél'). show ();
}
if ($ ('. cél-láthatóság'). css ('láthatóság') == 'rejtett') {
$ ('. cél-láthatóság'). css ({
láthatóság: "látható",
display: ""
});
} más {
$ ('. cél-láthatóság'). css ({
láthatóság: "rejtett",
display: ""
});
}
if ($ ('. cél-láthatóság'). css ('átlátszatlanság') == "0") {
$ ('. cél-láthatóság'). css ({
átlátszatlanság: "1",
display: ""
});
} más {
$ ('. cél-láthatóság'). css ({
átlátszatlanság: "0",
display: ""
});
}
Hasznos jQuery váltási módszerek:
$ ('. click'). click (function () {
$ ('. cél'). váltás ();
});
$ ('. click'). click (function () {
$ ('.. cél'). slideToggle ();
});
$ ('. click'). click (function () {
$ ('. target'). fadeToggle ();
});
|
Ezt egyszerű JavaScript használatával is megteheti:
függvény isRendered (domObj) {
if ((domObj.nodeType! = 1) || (domObj == dokumentum.test)) {
return true;
}
if (domObj.currentStyle && domObj.currentStyle ["display"]! = "nincs" && domObj.currentStyle ["láthatóság"]! = "rejtett") {
return isRendered (domObj.parentNode);
} else if (window.getComputedStyle) {
var cs = document.defaultView.getComputedStyle (domObj, null);
if (cs.getPropertyValue ("display")! = "nincs" && cs.getPropertyValue ("láthatóság")! = "rejtett") {
return isRendered (domObj.parentNode);
}
}
return false;
}
Megjegyzések:
Mindenhol működik
Beágyazott elemek esetén működik
CSS és inline stílusokhoz működik
Nem igényel keretet
|
A CSS osztályt használnám .hide {display: none! Fontos; }.
A rejtés / megjelenítés érdekében hívom az .addClass ("hide") /. RemoveClass ("hide") fájlt. A láthatóság ellenőrzéséhez a .hasClass ("hide") fájlt használom.
Ez egy egyszerű és világos módszer az elemek ellenőrzésére / elrejtésére / megjelenítésére, ha nem tervezi .toggle () vagy .animate () módszerek használatát.
|
Demo Link
$ ('# clickme'). click (function () {
$ ('# book'). toggle ('lassú', function () {
// Animáció kész.
figyelmeztetés ($ ('# book'). is (": látható")); // <--- IGAZ, ha látható Hamis, ha rejtve van
});
});

Kattints ide
Forrás: Blogger Plug n Play - jQuery eszközök és widgetek: Hogyan láthatja el, hogy az elem rejtve van-e vagy látható-e a jQuery használatával | Egyszerűen használhatja a rejtett vagy látható attribútumot, például: $ ('elem: rejtett') $ ('elem: látható') Vagy egyszerűsítheti ugyanezt az alábbiak szerint. $ (element) .is (": látható") | Az ebdiv-re a style = "display: none;" értéket kell beállítani. Műsorra és rejtésre egyaránt használható: $ (dokumentum) .ready (függvény () { $ ("# eb"). kattintson (function () { $ ("# ebdiv"). toggle (); }); }); | Egy másik válasz, amelyet figyelembe kell vennie, ha elrejt egy elemet, akkor használja a jQuery-t, de a tényleges elrejtés helyett eltávolítja az egész elemet, de a HTML-tartalmát és magát a címkét is jQuery változóba másolja, mindössze annyit kell tennie, hogy tesztelje, van-e ilyen címke a képernyőn, a normál if (! $ ('# thetagname'). hossz használatával. | Ha elemet tesztelnek a: rejtett választóval szemben a jQuery-ben, figyelembe kell venni, hogy egy abszolút pozícionált elem rejtettnek ismerhető fel, bár gyermekelemeik láthatók. Ez elsősorban némileg ellentmondásosnak tűnik - bár a jQuery dokumentációjának alaposabb áttekintése megadja a releváns információkat: Az elemeket több okból is rejtettnek tekinthetjük: [...] Szélességüket és magasságukat kifejezetten 0-ra állítják. [...] Tehát ennek valójában van értelme a box-modell és az elem kiszámított stílusa szempontjából. Még akkor is, ha a szélességet és a magasságot nem állítják kifejezetten 0-ra, implicit módon is beállíthatják őket. Vessen egy pillantást a következő példára: console.log ($ ('. foo'). is (': rejtett')); // igaz console.log ($ ('. bar'). is (': rejtett')); // hamis .foo { pozíció: abszolút; bal: 10px; felső: 10px; háttér: # ff0000; } .rúd { pozíció: abszolút; balra: 10px; felső: 10px; szélesség: 20px; magasság: 20px; háttér: # 0000ff; }
JQuery 3.x frissítés: A jQuery 3 alkalmazásával a leírt viselkedés megváltozik! Az elemeket akkor tekintjük láthatónak, ha vannak elrendezési dobozaik, beleértve a nulla szélességet és / vagy magasságot is. JSFiddle jQuery 3.0.0-alfa1-gyel: http://jsfiddle.net/pM2q3/7/ Ekkor ugyanaz a JavaScript kód fogja megadni ezt a kimenetet: console.log ($ ('. foo'). is (': rejtett')); // hamis console.log ($ ('. bar'). is (': rejtett'));// hamis | Ez működhet: várható ($ ("# message_div"). css ("display")). toBe ("nincs"); | Példa: $ (dokumentum) .ready (függvény () { if ($ ("# checkme: rejtett"). hossz) { console.log ('Rejtett'); } }); | Annak ellenőrzésére, hogy nem látható-e, használom!: ha (! $ ('# könyv'). is (': látható')) { figyelmeztetés ('# könyv nem látható') } Vagy a következő is a sam, amely a jQuery választót egy változóba menti, hogy jobb teljesítményt nyújtson, amikor többször szüksége van rá: var $ book = $ ('# book') if (! $ book.is (': látható')) { figyelmeztetés ('# könyv nem látható') } | Használjon osztályváltást, ne stílusszerkesztést. . . Az elemek "elrejtésére" kijelölt osztályok használata egyszerű és egyben a leghatékonyabb módszer. Ha a „rejtett” osztályt a „Nincs” megjelenítési stílussal kapcsolja be, akkor az gyorsabb lesz, mint a stílus közvetlen szerkesztése. Néhányat elég alaposan elmagyaráztam a Stack Overflow kérdésben. Két elem láthatóvá / rejtetté változtatása ugyanabban a div-ben. JavaScript legjobb gyakorlatok és optimalizálás Itt van egy igazán felvilágosító videó Nicholas Zakas, a Google front-end mérnöke által készített Google Tech Talkról: Gyorsítsa fel Javascriptjét (YouTube) | Példa az Adblocker látható ellenőrzésének használatára aktiválva: $ (dokumentum) .ready (függvény () { if (! $ ("# ablockercheck"). is (": látható")) $ ("# ablockermsg"). text ("Kérjük, tiltsa le az adblockert."). show (); });
Az "ablockercheck" egy azonosító, amelyet az adblocker blokkol. Tehát ellenőrizve, hogy látható-e, akkor észleli, hogy az adblocker be van-e kapcsolva. | Végül is egyik példa sem felel meg nekem, ezért a sajátomat írtam. Tesztek (nem támogatja az Internet Explorer szűrőt: alfa): a) Ellenőrizze, hogy a dokumentum nincs-e elrejtve b) Ellenőrizze, hogy egy elem nulla szélességgel / magassággal / átlátszatlansággal rendelkezik-e vagy nincs-e megjelenítve: nincs / láthatóság: rejtve a belső stílusokban c) Ellenőrizze, hogy az elem közepét (azért is, mert gyorsabb, mint minden pixel / sarok tesztelése) nem rejti el más elem (és az összes ős, például: túlcsordulás: rejtett / görgetés / egyik elem a másik felett) vagy a képernyő szélei d) Ellenőrizze, hogy egy elem nulla szélességgel / magassággal / átlátszatlansággal vagy kijelzővel rendelkezik-e: nincs / láthatóság: rejtve a számított stílusokban (az összes ős között) Tesztelve Android 4.4 (natív böngésző / Chrome / Firefox), Firefox (Windows / Mac), Chrome (Windows / Mac), Opera (Windows Presto / Mac WebKit), Internet Explorer (Internet Explorer 5-11 dokumentummódok + Internet Explorer 8 virtuális gép) és a Safari (Windows / Mac / iOS). var is_visible = (function () { var x = window.pageXOffset? window.pageXOffset + window.innerWidth - 1: 0, y = window.pageYOffset? window.pageYOffset + window.innerHeight - 1: 0, rokon = !! ((! x &&! y) ||! document.elementFromPoint (x, y)); belüli funkció (gyermek, szülő) { míg (gyermek) { ha (gyermek === szülő) igaz; gyermek = gyermek.szülőNode; } return false; }; visszatérési függvény (elem) { ha ( dokumentum.rejtve || elem.offsetWidth == 0 || elem.offsetHeight == 0 || elem.style.visibility == 'rejtett' || elem.style.display == 'nincs' || elem.style.opacity === 0 ) return false; var rect = elem.getBoundingClientRect (); ha (rokon) { ha (! inside (document.elementFromPoint (rect.left + elem.offsetWidth / 2, rect.top + elem.offsetHeight / 2), elem)) false értéket ad vissza; } else if ( ! belül (document.elementFromPoint (rect.left + elem.offsetWidth / 2 + window.pageXOffset, rect.top + elem.offsetHeight / 2 + window.pageYOffset), elem) || ( rect.top + elem.offsetHeight / 2 <0 || rect.left + elem.offsetWidth / 2 <0 || rect.bottom - elem.offsetHeight / 2> (window.innerHeight || document.documentElement.clientHeight) || rect.right - elem.offsetWidth / 2> (ablak.innerWidth || document.documentElement.clientWidth) ) ) return false; if (window.getComputedStyle || elem.currentStyle) { var el = elem, comp = null; míg (el) { if (el === dokumentum) {break;} else if (! el.parentNode) hamis értéket ad vissza; comp = window.getComputedStyle? window.getComputedStyle (el, null): el.currentStyle; ha (comp && (comp.visibility == 'rejtett' || comp.display == 'none' || (type of comp.opacity! == 'undefined' && comp.opacity! = 1))] false értéket ad vissza; el = el.parentNode; } } return true; } }) (); Hogyan kell használni: is_visible (elem) // logikai | Ellenőriznie kell mindkettőt ... Kijelző és láthatóság: if ($ (this) .css ("display") == "nincs" || $ (this) .css ("láthatóság") == "rejtett") { // Az elem nem látható } más { // Az elem látható } Ha ellenőrizzük, hogy van-e $ (this) .is (": látható"), a jQuery automatikusan ellenőrzi mindkét dolgot. | Talán tehet ilyesmit $ (dokumentum) .ready (függvény () { var látható =$ ('# tElement'). is (': látható'); ha (látható) { riasztás ("látható"); // Kód } más { riasztás ("rejtett"); } }); Keresztnév | Egyszerűen ellenőrizze a láthatóságot egy logikai érték ellenőrzésével, például: ha (this.hidden === false) { // A kódod } Ezt a kódot használtam minden funkcióhoz. Ellenkező esetben a (': látható') paranccsal ellenőrizheti az elem láthatóságát. | Mivel a láthatóság: rejtett vagy átlátszatlanság: 0 elemeket láthatónak tekintjük, mivel ezek még elfogyasztanak helyet az elrendezésben (a jQuery: visible Selector esetében leírtak szerint) - ellenőrizhetjük, hogy az elem valóban így látható-e: függvény isElementReallyHidden (el) { return $ (el) .is (": hidden") || $ (el) .css ("láthatóság") == "rejtett" || $ (el) .css ('átlátszatlanság') == 0; } var booElementReallyShowed =! isElementReallyHidden (someEl); $ (someEl) .parents (). mindegyik (function () { if (isElementReallyHidden (ez)) { booElementReallyShowed = hamis; } }); | De mi van, ha az elem CSS-je hasonló a következőhöz? .elem{ pozíció: abszolút; bal: -9999; } Tehát ezt a választ a Verem túlcsordulás kérdésére is figyelembe kell venni. | Funkció hozható létre a láthatóság / kijelző attribútumok ellenőrzésére annak felmérése érdekében, hogy az elem megjelenik-e a felhasználói felületen vagy sem. function checkUIElementVisible (elem) { return ((element.css ('display')! == 'none') && (element.css ('láthatóság')! == 'rejtett')); } Dolgozó hegedülés | Itt van még egy háromfeltételes kifejezés az elem állapotának ellenőrzéséhez, majd a váltáshoz: $ ('someElement'). on ('click', function () {$ ('elementToToggle'). is (': látható')? $ ('elementToToggle'). hide ('slow'): $ ('elementToToggle ') .show (' lassú ');}); | if ($ ('# postcode_div'). is (': látható')) { if ($ ('# postcode_text'). val () == '') { $ ('# spanPost'). text ('\ u00a0'); } más { $ ('# spanPost'). text ($ ('# postcode_text'). val ()); } | 1 2 Következő Nagyon aktív kérdés. Nyerjen 10 hírnevet a kérdés megválaszolásához. A jó hírnév követelménye megvédi ezt a kérdést a spamektől és a nem válaszolóktól. Nem a keresett válasz? Böngésszen a javascript jquery dom láthatóságával címkézett egyéb kérdésekben, vagy tegye fel saját kérdését